/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myapp.model.DAO.Administrator.Exercises;

import com.myapp.model.DAO.HibernateUtil;
import com.myapp.model.comentarios.Comentarios;
import com.myapp.model.ejercicios.Ejercicios;
import com.myapp.model.estados.Estados;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Tarde
 */
public class AdminExerciseDao {

    /**
    * Metodo que guarda o actualiza un ejercicio
    * @param Ejercicios ej
    * @return Ejercicios
    */
    public Ejercicios newOrUpdateEjercicio(Ejercicios ej) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();
            session.saveOrUpdate(ej);
            session.getTransaction().commit();
        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }

        return ej;
    }
    /**
    * Metodo para buscar un ejercicio por id 
    * @param String idEjercicio, Ejercicios ej
    * @return Ejercicios
    */
    public Ejercicios buscarPorId(String idEjercicio, Ejercicios ej) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();

            //Consulta de comprobacion 
            ej = (Ejercicios) session.createCriteria(Ejercicios.class).
                    add(Restrictions.eq("idejercicio", ej.getIdejercicio())).uniqueResult();
            session.getTransaction().commit();

        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }
        return ej;
    }
    /**
     * Metodo para buscar un ejercicio por idusuario
     * @param Ejercicios ej
     * @return Ejercicios
     */
    public Ejercicios search(Ejercicios ej) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            session.beginTransaction();

            //Consulta de comprobacion 
            ej = (Ejercicios) session.createCriteria(Ejercicios.class).
                    add(Restrictions.eq("idusuario", ej.getUsuarios())).uniqueResult();
            session.getTransaction().commit();

        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }
        return ej;
    }
    /**
    * Metodo que borra un ejercicio marcando el estado en desactivo
    * @param Ejercicios ej 
    */
    public void deleteEjercicio(Ejercicios ej) {
        //Obtener la sesión actual 
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        try {
            //Comenzar la transacción 
            session.beginTransaction();
            //localizarlo en la sesion
            Integer id = ej.getIdejercicio();
            ej = (Ejercicios) session.get(Ejercicios.class, id);

            byte b = 4; // Codigo desactivado
            Estados e = new Estados();
            e.setIdestado(b);

            ej.setEstados(e);
            session.update(ej);
            session.getTransaction().commit();

        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }
    }
    /**
     * Metodo que lista los ejercicios cuyo estado sea distinto a desactivo o borrado
     * @return List
     */
    public List<Ejercicios> listEjercicios() {
        //Obtener la sesión actual 
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        List lista = null;
              
        try {

            //Comenzar la transacción 
            session.beginTransaction();
            //Obtener la lista de usuarios
            lista = session.createQuery("from Ejercicios as e where e.estados.idestado != 4").list();

            //Confirmar transacción 
            session.getTransaction().commit();
        } catch (HibernateException err) {
            session.getTransaction().rollback();
        }
        return lista;
    }
    /**
     * Metodo que lista los ejercicios segun el id del tema
     * @param String idTema
     * @return List
     */
    public List listarPorTema(String idTema) {
        List listEjercicio = null;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        try {
            session.beginTransaction();
            /*
             * La siguiente consulta nos mostrara el listado de ejercicios
             * propuestos segun el tema seleccionado
             */
            /*
             * listEjercicio = session.createCriteria(Ejercicios.class).
             * add(Restrictions.eq("temas.idtema", idTema)).list();
             * session.getTransaction().commit();
             */
            listEjercicio = session.createQuery("from Ejercicios as e where e.temas.idtema=" + idTema + " and e.estados.idestado != 4").list();
        } catch (HibernateException err) {
            System.out.println(err);

            session.getTransaction().rollback();
        }

        return listEjercicio;
    }

    /**
     * El siguiente método nos mostrara el listado de todos los comentarios
     * que tenga un ejercicio determinado
     * 
     * @param Ejercicios con el idejercicio lleno
     * @return lista de comentarios
     */
    public List<Comentarios> listarComentariosPorIdEjercicio(Ejercicios ej) {
        
        List<Comentarios> listComments = null;
        byte cuatro = 4;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        try {
            
            session.beginTransaction();
            
            listComments = session.createQuery("from Comentarios as e where idejercicio=" + ej.getIdejercicio() + " and estados.idestado <>" + cuatro).list();
        
        } catch (HibernateException err) {
            System.out.println(err);
            
            listComments = null;
            
            session.getTransaction().rollback();
        }

        return listComments;
    }
}
